const express = require('express')

const app = express()

// 解析表单的中间件
app.use(express.urlencoded({ extended: true }))
app.use(express.json())

// CORS 中间件
const { CORS } = require('./middleware/CORS')
app.use(CORS({
  headres: ['Authorization']
}))

const { generateToken, verifyToken } = require('./tools/jwt')

/* app.get('/CORS', (req, res) => {
  res.json({
    code: 100,
    msg: '跨域请求成功！'
  })
}) */

app.post('/signIn', (req, res) => {
  const { username, password } = req.body
  if (username !== 'admin') {
    return res.json({
      code: 101,
      msg: '用户名不存在'
    })
  }
  if (password !== '123456') {
    return res.json({
      code: 102,
      msg: '密码有误'
    })
  }
  res.json({
    code: 100,
    msg: '登录成功',
    data: {
      token: generateToken({id: '007', username: 'admin'})
    }
  })
})

// 需要 jwt 权限的接口
app.use('/validation/*', verifyToken)

// 需要 jwt 权限的接口
app.get('/validation/initialData', (req, res) => {
  const { id, username } = req
  res.json({
    code: 100,
    msg: 'token 解析成功',
    data: {
      id,
      username
    }
  })
})

// 全局错误中间件
app.use((err, req, res, next) => {
  /* if (err.name === 'JsonWebTokenError') {
    res.send(JSON.stringify({ status: 405, msg: '无效的 token' }))
  } else if (err.name === 'TokenExpiredError') {
    res.send(JSON.stringify({ status: 406, msg: 'token 过期' }))
  } */
  console.log(err)
  switch(err.name) {
    // 校验 token
    case 'JsonWebTokenError': res.json({ code: 405, msg: '无效的 token' }); break;
    case 'TokenExpiredError': res.json({ code: 406, msg: 'token 过期' }); break;
    default: res.json({ status: 500, msg: '未知的错误' })
  }
})

app.listen(80, () => {
  console.log('express server running at http://127.0.0.1')
})